#ifndef KURCACI_H
#define KURCACI_H
#include "player.h"
#include "boolean.h"


	
class Kurcaci
{
		protected:
                        Position PosKurcaci; //menyimpan posisi kurcaci pada saat ini
			Position Chase; //Target Tanaman
			int Status; //menyimpan status kurcaci, 0 jika Sleep, 1 jika Awake
			boolean AnyTarget; //bernilai true jika kurcaci menentukan sebuah tanaman untuk dijadikan target, dan false jika tidak.
			
		public:
                    void Move(); //Method gerakan kurcaci
                        void SetX(int); // mengeset nilai posisi x dari Kurcaci (berfungsi untuk kelas anak)
                        void SetY(int); // mengeset nilai posisi y dari Kurcaci (berfungsi untuk kelas anak)
                        int GetX() const; //  mengambil nilai posisi x dari Kurcaci (berfungsi untuk kelas anak)
                        int GetY() const; //  mengambil nilai posisi y dari Kurcaci (berfungsi untuk kelas anak)
                        Position GetChase() const; // mengembalikan nilai chase tanaman dari suatu kurcaci
                        
			//void Move(); //memerintahkan kurcaci untuk bergerak sejumlah satu langkah
			void Sleep(); //memerintahkan kurcaci untuk tidur
			void WakeUp(); //memerintahkan kurcaci untuk bangun
			int GenRandom(); //Mengembalikan nilai random, dari 1 - 4
			void ChaseTarget(); //Bergerak ke arah target. Berlaku jika AnyTarget = 1
                        boolean IsWakeUp() const; //mengembalikan 1 jika WakeUp, 0 jika Sleep
			boolean IsTargetting() const; //mengembalikan nilai AnyTarget.
                        void SetTarget(int); //masukkan 1 untuk membuat kurcaci mengejar target yang ada di Chase. 0 untuk mematikan.
			void SetChase(int, int); //mengubah nilai point Chase ke posisi tanaman terdekat

                        virtual void HomingTanaman()=0; // Mencari tanaman yang sesuai dengan spesifikasi masing - masing kurcaci. dibuat "virtual" oleh karena didefinisikan di kelas anak (Aqua, Bolt, Clash)
                        virtual void ActKurcaci()=0; //Aksi kurcaci bila berada di sebelah tanaman yang cocok. Berbeda untuk masing - masing kurcaci.
                        virtual boolean IsSafeToWalk(int,int)=0;//Memeriksa apakah aman untuk melangkah menuju posisi yang dimasukkan. Memeriksa lahan, posisi player, dan posisi kurcaci lain.
                        void PrintStatus();
                        int GetStatus();
};

#endif
